#
# 使用python打开二进制文件ialookup.dat,将该文件分为128KB每段(最后一段是小于128KB的),求每段的CRC32校验和,并且以C语言数组的形式输出.
# c语言数组,要用16进制形式给出,并且每行8个数据.

import binascii
import os

# 打开二进制文件
with open('lookup.dat', 'rb') as file:

    # 初始化一个列表来存储CRC32校验和（以16进制形式）
    crc32_checksums_hex = []

    # 计算文件大小
    file_size = os.path.getsize('lookup.dat')

    # 按128KB分段读取文件
    for offset in range(0, file_size, 131072):
        # 读取当前段的数据
        data = file.read(min(131072, file_size - offset))

        # 计算并添加CRC32校验和（以16进制）到列表
        crc32_checksums_hex.append(hex(binascii.crc32(data) & 0xFFFFFFFF)[2:].upper())

# 以C语言数组形式输出校验和，每行8个数据
output = "static const uint32_t crc32_checksums[] = {\n"
for i, checksum in enumerate(crc32_checksums_hex):
    output += f"  0x{checksum},"
    if (i + 1) % 8 == 0:
        output += "\n"
output += "};"

print(output)